/*
 * @Author: ellery
 * @Date: 2022-08-21 18:36:50
 * @LastEditTime: 2022-08-28 00:18:38
 * @LastEditors: ellery
 * @Description:请求配置,具体使用方式在这:https://gitee.com/liu_rong/puapi/tree/master,（文件已抽离出来，不需要npm，只看如何使用就行了）若无法打开，请至邮箱。
 * @FilePath: \vue2-eslint-model\src\api\index.js
 * Copyright (c) 2022 by ellery, All Rights Reserved.
 * 愿天堂没代码
 */

import PUAPi from "./puapi";
import Vue from "vue";
import apiUrls from "./apiUrls.js"; // 请求地址
import staticUrls from "./staticUrls.js"; // 静态访问地址
import { httpHost } from "@/config"; // 引入请求域名
import storage from "@/common/storage";
// 使用插件
Vue.use(PUAPi, {
  apiUrls,
  staticUrls, // 若无staticUrls，直接声明一个空对象
  baseConfig: {
    baseURL: httpHost
  },
  codeCatcher(data) {
    // 这里errCode是状态码，下面$catch捕获的状态以这为准,建议后端添加上这个字段，或前端以后端给的字段为准修改
    // return data.errCode;
    return data.status;
  }
});
Vue.prototype.$api = PUAPi.$api; // 全局挂在，在main.js那 import "@/api";或者挂在到vuex上,得异步action

// 若拦截处理特别多或者长，需要分文件引入

// 捕捉并解析不同的业务状态码,并返回解析后的数据
// PUAPi.$catch(type,fn) type 可为单个元素或数组，fn数据返回
PUAPi.$catch(0, (res) => {
  // 请求成功时
  // console.log("这里", res);
  return {
    success: true,
    data: res.data.data,
    total: res.data.total
  };
});

PUAPi.$catch([1, 3000], (res) => {
  console.log("这里1", res);
  // 类似拦截器
  if (res.data.msg) {
    alert(res.data.msg);
  }
  return {
    success: false
  };
});

PUAPi.$catch([4], (res) => {
  console.log("这里2", res);
  // 类似拦截器
  if (res.data.msg) {
    alert(res.data.msg);
  }
  // store.commit("logout"); 强制跳转到登录界面
  return {
    success: false
  };
});

// 监听插件广播的事件
PUAPi.$on("REQUEST", (config) => {
  config.headers.token = storage("gss", 1); // 每次请求带上token,token可以从vuex或者本地缓存获取
  return config;
});

PUAPi.$on("RESPONSE", (_response) => {
  // TODO
});

PUAPi.$on("ERROR", (_error) => {
  // TODO
});
